Computer programs may be written to allow different portions (e.g., threads) of the program to be executed concurrently. In order to execute different portions of the program concurrently, the computer system or the program typically includes some mechanism to manage the memory accesses of the different portions to ensure that the parts access common memory locations in the desired order.
Transactional memory systems allow programmers to designate transactions in a program that may be executed as if the transactions are executing in isolation (i.e., independently of other transactions and other sequences of instructions in the program). Transactional memory systems manage the memory accesses of transactions by executing the transactions in such a way that the effects of the transaction may be rolled back or undone if two or more transactions attempt to access the same memory location in a conflicting manner. Transaction memory systems may be implemented using hardware and/or software components.
By tracking each memory access, however, transaction memory systems may add overhead to the execution of programs. If memory accesses to the same data are identified, transaction memory systems may be able to reduce the amount of overhead used to track the memory accesses. Unfortunately, accesses to the same data may be spaced out through a program and may use different variable names for the same data. In addition, the effect of instructions on the program between accesses to the same data may be difficult to discern.